//============================================================================//
// [ DataLibrary ]                                                     [樹招] //
//============================================================================//

// Ver.2.01 (2008/06/07)

//-- IncludeFile --//
<Lib\DataLibrary\MainConfig.eve>

//----------------------------------------------------------------------------//
// ShowDataLibrary [library_id] [option]
//  -> DataLibraryを実行する。
//------------------------------------//
ShowDataLibrary:
	// 基本変数を設定する
	Set DL_MainTitle "-"     // タイトル
	Set DL_ShowGUI "Index"   // 表示するインターフェース
	Set DL_ShowLib 0         // 表示するライブラリのID番号
	Set DL_ShowID 0          // 表示する項目のID番号
	
	Set DL_FunctionList ""   // FunctionPluginList
	Set DL_InterfaceList ""  // InterfacePluginList
	Set DL_SkinList ""       // SkinList
	
	// 引数をリスト形式で記録する
	Call DL_SetStartupOption
	
	// プラグインを読み込む
	Call DL_LoadFunction
	Call DL_LoadInterface "Index"
	Call DL_ConfigOption
	
	// 起動処理を行う
	Call DL_IDX_SkinAction "NowLoading"
	Call DL_ExecuteStartup
	
	// BGMを演奏する
	Call DL_PlaySound_BGM
	
	// メインループを開始する
	Do
		Call ("DL_GUI_" & DL_ShowGUI)
	Loop While (DL_ShowGUI != "")
	
	// 終了処理を行う
	Call DL_PluginTermination
	
	// 変数を破棄する
	UnSet DL_MainTitle
	UnSet DL_ShowGUI
	UnSet DL_ShowLib
	UnSet DL_ShowID
	UnSet DL_StartupOption
	UnSet DL_SingleMode
	UnSet DL_Option
Return


//----------------------------------------------------------------------------//
// Plugin
//----------------------------------------------------------------------------//

//-- LoadFunction : FunctionPluginを読み込む --//
DL_LoadFunction:
	Local path = DL_FolderPath_Function()
	
	If Not Right(path, 1) Like "[\/]" Then
		path = path & "\"  // 末尾に区切り記号がない場合は追加する
	EndIf
	
	// フォルダにあるプラグインをすべて読み込む
	Local name = Replace(Dir(path & "*.eve", "ファイル"), ".eve", "")
	Local temp
	Do While (name != "")
		Require (path & name & ".eve")
		Set DL_FunctionList List(DL_FunctionList, name)
		temp = Eval("DL_LoadFunction_" & name & "()")
		name = Replace(Dir(), ".eve", "")
	Loop
Return


//-- LoadInterface name : InterfacePluginを読み込む --//
DL_LoadInterface:
	Local name = Args(1)
	Local path = DL_FolderPath_Interface()
	
	If Not Right(path, 1) Like "[\/]" Then
		path = path & "\"  // 末尾に区切り記号がない場合は追加する
	EndIf
	
	If DL_IsPlugin(name, "Interface") Then
		Return  // すでに読み込んでいる場合は終了する
	EndIf
	
	// プラグインを読み込む
	If Dir(path & name & ".eve", "ファイル") != "" Then
		Require (path & name & ".eve")
		Set DL_InterfaceList List(DL_InterfaceList, name)
		Local temp = Eval("DL_LoadInterface_" & name & "()")
	EndIf
Return


//-- LoadSkin : スキンを読み込む --//
DL_LoadSkin:
	Local name = Args(1)
	Local path = DL_FolderPath_Skin()
	
	If Not Right(path, 1) Like "[\/]" Then
		path = path & "\"  // 末尾に区切り記号がない場合は追加する
	EndIf
	
	If DL_IsPlugin(name, "Skin") Then
		Return  // すでに読み込んでいる場合は終了する
	EndIf
	
	// スキンを読み込む
	If Dir(path & name & "Skin.eve", "ファイル") != "" Then
		Require (path & name & "Skin.eve")
		Set DL_SkinList List(DL_SkinList, name)
		Local temp = Eval("DL_LoadSkin_" & name & "()")
	EndIf
Return


//-- PluginTermination : すべてのプラグインを終了する --//
DL_PluginTermination:
	Local temp i
	For i = 1 To LLength(DL_FunctionList)
		temp = Eval("DL_UnloadFunction_" & LIndex(DL_FunctionList, i) & "()")
	Next
	For i = 1 To LLength(DL_InterfaceList)
		temp = Eval("DL_UnloadInterface_" & LIndex(DL_InterfaceList, i) & "()")
	Next
	For i = 1 To LLength(DL_SkinList)
		temp = Eval("DL_UnloadSkin_" & LIndex(DL_SkinList, i) & "()")
	Next
	UnSet DL_FunctionList
	UnSet DL_InterfaceList
	UnSet DL_SkinList
Return


//-- IsPlugin(name[, type]) : プラグインが読み込まれているなら1を返す --//
DL_IsPlugin:
	Local name = LCase(Args(1))
	Local type = LSearch("function interface skin", LCase(Args(2)))
	
	If type Like "[01]" Then
		Return (LSearch(LCase(DL_FunctionList), name) > 0)
	EndIf
	If type Like "[02]" Then
		Return (LSearch(LCase(DL_InterfaceList), name) > 0)
	EndIf
	If type Like "[03]" Then
		Return (LSearch(LCase(DL_SkinList), name) > 0)
	EndIf
Return 0


//----------------------------------------------------------------------------//
// Startup
//----------------------------------------------------------------------------//

//-- RegisterStartup subroutine priority : サブルーチンを起動処理に登録する --//
DL_RegisterStartup:
	If IsNumeric(Args(2)) Then
		Set DL_Startup[Args(1)] Args(2)
	Else
		Set DL_Startup[Args(1)] 9
	EndIf
Return


//-- ExexuteStartup : 起動処理を実行する --//
DL_ExecuteStartup:
	Sort DL_Startup "文字" "昇順"  // 優先順位でソートする
	
	Local temp idx
	ForEach idx In DL_Startup
		temp = Call(idx)
	Next
	UnSet DL_Startup
Return


//----------------------------------------------------------------------------//
// Option
//----------------------------------------------------------------------------//

//-- SetStartupOption : 引数をリスト形式で記録する --//
DL_SetStartupOption:
	UpVar
	Set DL_StartupOption ""
	
	// シングルモードを設定する
	If IsVarDefined(DL_LibInfo[Args(1)]) Then
		Set DL_SingleMode Args(1)
	EndIf
	
	// 引数をリスト形式で記録する
	Local i
	For i = 2 To ArgNum
		Set DL_StartupOption List(DL_StartupOption, "(" & Args(i) & ")")
	Next
Return


//-- GetOptionValue(name[, value]) : オプションの値を返す --//
DL_GetOptionValue:
	If IsVarDefined(DL_Option[Args(1)]) Then
		Return DL_Option[Args(1)]
	EndIf
Return Args(2)


